package com.boat.framework.common.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import com.boat.framework.common.util.JsonUtils;

import lombok.Getter;
import lombok.Setter;

/**
 * 基础实体类
 * 
 * @author 周江
 *
 * @param <T>
 */
@Setter
@Getter
public class BaseEntity<K> implements Serializable{
	/** 主键 */
	private K id;
	
	/** 添加时间, 数据库字段：create_time */
	private Date createTime;

	/** 修改时间, 数据库字段：update_time */
	private Date updateTime;
	
	/** 备注 */
	private String remark;

	/** 软删除标识, 0-未删除，其他值-已删除。删除时设置为当前时间戳。id和deleted可做联合唯一主键，用于数据防重 */
	private int deleted;
	
	@Override
	public String toString() {
		return JsonUtils.toJson(this);
	}

	@Override
	public int hashCode() {
		return Objects.hash(deleted, id);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		BaseEntity other = (BaseEntity) obj;
		return deleted == other.deleted && Objects.equals(id, other.id);
	}
	
}
